我有一个以前用德语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
答案 0 :(得分:1)
您假设工作表中有一个图表Diagramm 1
,但是在其他版本的Excel中,名称将有所不同。
您应避免使用ActiveSheet
,ActiveChart
和Select
来访问任何对象。我强烈建议您阅读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