【发布时间】:2021-04-16 20:52:08
【问题描述】:
我正在修改我当前的代码,使其更加用户友好。我的原始代码有硬编码的文件路径。下面的新代码从“控件”子传递文件路径,它们由输入框指定。我遇到的问题是,现在,一旦在私有子例程中,If 语句不再起作用。唯一的区别是文件路径是从另一个 sub 传递的,而不是硬编码到这个 sub 中。我不确定我错过了什么。任何帮助都会很棒。
Private Sub copyGLbuildings(NewRecPath As String, GLsrcPath As String)
Dim fname1 As Variant
Dim fname2 As Variant
Dim wb1 As Workbook
Dim Wb0 As Workbook
fname1 = Dir(GLsrcPath & "*Buildings*")
fname2 = Dir(NewRecPath & "*Buildings Rec*")
If fname1 <> "" Then
Set wb1 = Workbooks.Open(GLsrcPath & fname1)
End If
If fname2 <> "" Then
Set Wb0 = Workbooks.Open(NewRecPath & fname2)
End If
Wb0.Sheets(1).Name = "Data"
Wb0.Sheets.Add.Name = "GL"
wb1.Worksheets(1).UsedRange.Copy
Wb0.Worksheets("GL").UsedRange.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wb0.Worksheets("GL").UsedRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wb0.Worksheets("GL").UsedRange.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wb0.Worksheets(1).Activate
ActiveWorkbook.Windows(1).DisplayGridlines = False
Call CleanFAGL
wb1.Close
Wb0.Close savechanges:=True
End Sub
【问题讨论】:
-
NewRecPath的末尾是否有反斜杠?GLsrcPath呢? -
见
EnsureSlash这里stackoverflow.com/questions/67077087/… -
在'if fname1'之前在你的代码中放置一个断点,并在locals窗口中查看fname1和fname2的值。这些值是正确格式的文件路径吗?
-
@braX - 不,他们没有。我想当有人从文件资源管理器复制时,不包括结尾斜杠;至少在我测试的时候还没有。
-
@freeflow - 作为编码新手,我不知道您可以像这样进入代码。一旦我这样做了,很明显 fname1 和 fname 2 没有任何价值。我在指定变体时缺少反斜杠。现在看起来效果很好!
标签: excel vba subroutine