将Excel语言从德语更改为英语

时间:2018-12-20 08:09:10

标签: excel vba

我有一个以前用德语Excel版本制作的宏,用于另一个市场(说英语的人)。

我正在处理大量数据,最后是自动运行的图表。一键保存并完成。当我在Excel上将语言更改为英语时,我对程序本身进行了更正(例如工作表或图表的名称),但仍然给我一个错误。

Sub Button2_Click()

Dim fd As FileDialog
Dim FileChosen As Integer
Dim FileName As String
Dim tempWB As Workbook
Dim i As Integer
Dim templateLocation As String
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

' *** Template Location to define ***
MsgBox "Please define your Templates folder!", vbOKOnly + vbInformation, "Information!"
templateLocation = GetTemplateLocation()

Set fd = Application.FileDialog(msoFileDialogFilePicker)

' *** Define the location to load certain file ***
If templateLocation = "" Then
Exit Sub
End If
fd.InitialFileName = "Q:\Objekt"
MsgBox "Upload your files for Macro Charts!", vbOKOnly + vbExclamation, "Information!"
fd.InitialView = msoFileDialogViewList
fd.AllowMultiSelect = True

FileChosen = fd.Show
If FileChosen = -1 Then
For i = 1 To fd.SelectedItems.Count
    Set tempWB = Workbooks.Open(fd.SelectedItems(i))
    Call ReadDataFromSourceFile(tempWB, templateLocation)
Next i
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Private Sub ReadDataFromSourceFile(src As Workbook, templateLocation As String)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


' *** Creating Charts ***
'Inlet Heating
Range("A:A,J:K").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table1!$A:$A,Table1!$J:$K")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Inlet_heating.crtx" _
    )
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 1").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 1").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - Inlet_heating ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Temperature (°C)"

'Inlet Pressure
Columns("A:C").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table1!$A:$C")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Inlet_pressure.crtx" _
    )
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 2").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 2").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - Inlet_pressure ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Pressure (mbar)"

'Module Temperature 1
Range("A:A,D:F").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table1!$A:$A,Table1!$D:$F")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Module_temperature.crtx")
ActiveSheet.ChartObjects("Diagramm 3").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 3").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 3").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - C1 - CC ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Temperature (°C)"

'Module Temperature 2
Range("A:A,G:I").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table1!$A:$A,Table1!$G:$I")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Module_temperature.crtx")
ActiveSheet.ChartObjects("Diagramm 4").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 4").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 4").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - C2 - CC ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Temperature (°C)"

'Outlet Concentration
Sheets("Table2").Select
Columns("A:E").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table2!$A:$E")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Outlet_concentration.crtx")
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 1").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 1").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - Outlet_concentration ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Concentration (ppb)"

'Pressure_Switch
Sheets("Table3").Select
Columns("A:C").Select
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
ActiveChart.SetSourceData Source:=Range("Table3!$A:$C")
ActiveChart.ApplyChartTemplate ( _
    templateLocation & "\Pressure_switch.crtx")
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).MinimumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True
ActiveChart.Axes(xlCategory).MajorUnit = 1
ActiveSheet.Shapes("Diagramm 1").Height = 240.9448818898
ActiveSheet.Shapes("Diagramm 1").Width = 453.5433070866
ActiveChart.ChartTitle.Select
Selection.Caption = "CS - Pressure_switch ()"
ActiveChart.Axes(xlValue).AxisTitle.Select
Selection.Caption = "Pressure (mbar)"

'Positioning and combining on Sheet1
Sheets("Table1").Select
Application.CommandBars("Format Object").Visible = False
ActiveSheet.ChartObjects("Diagramm 4").Activate
ActiveSheet.Shapes("Diagramm 4").IncrementLeft 480
ActiveSheet.Shapes("Diagramm 4").IncrementTop 223
Range("U15").Select
ActiveSheet.ChartObjects("Diagramm 3").Activate
ActiveSheet.Shapes("Diagramm 3").IncrementLeft 480
ActiveSheet.Shapes("Diagramm 3").IncrementTop -22
Range("O8").Select
ActiveWindow.SmallScroll Down:=6
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveSheet.Shapes("Diagramm 2").IncrementLeft 27
ActiveSheet.Shapes("Diagramm 2").IncrementTop 223
Range("L11").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveSheet.Shapes("Diagramm 1").IncrementLeft 27
ActiveSheet.Shapes("Diagramm 1").IncrementTop -22
Range("L9").Select

Sheets("Table2").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Parent.Cut
Sheets("Table1").Select
Range("C6").Select
ActiveSheet.Paste

Sheets("Table3").Select
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.Parent.Cut
Sheets("Table1").Select
Range("C22").Select
ActiveSheet.Paste

' *** Close and SaveAs in the same Folder where we took original file ***
        Application.ActiveWorkbook.Close

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

Function GetTemplateLocation() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .Title = "Select Template location"
    .AllowMultiSelect = False
    .InitialFileName = Application.DefaultFilePath
    If .Show <> -1 Then GoTo NextCode
    sItem = .SelectedItems(1)
End With
NextCode:
GetTemplateLocation = sItem
Set fldr = Nothing
End Function

1 个答案:

答案 0 :(得分:1)

您假设工作表中有一个图表Diagramm 1,但是在其他版本的Excel中,名称将有所不同。

您应避免使用ActiveSheetActiveChartSelect来访问任何对象。我强烈建议您阅读How to avoid using Select in Excel VBA

在您的情况下,而不是选择创建的图表并使用ActiveChart,而是将AddChart2方法的结果分配给变量。您的代码可能看起来像这样(我建议您使用工作表变量而不是ActiveSheet,但这不是目前的重点,因此我将其保留在此处):

Dim sh As Shape, ch As Chart
Set sh = ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers)
sh.Name = "Inlet_heating"
Set ch = sh.Chart
With ch
    .SetSourceData Source:=Range("Table1!$A:$A,Table1!$J:$K")
    .ApplyChartTemplate ( templateLocation & "\Inlet_heating.crtx")
    .Axes(xlCategory).MinimumScaleIsAuto = True
    ....
end with