【发布时间】:2021-06-29 08:50:57
【问题描述】:
我们正在创建一个 Excel VBA 程序来创建文件夹和 word/excel 文档。 主程序将调用 subs(创建文件夹、创建单词、创建 excel),但我也希望 subs 能够在没有主程序启动它们的情况下自行处理/记住变量。
问题/问题:有没有比在每个子例程中放置 SÖKVÄG_UPPDRAG = "G:\Administrativt\Automattillverkning av dokument\Zebastian" 更好的方法来重新初始化变量 SÖKVÄG_UPPDRAG 的值?变量 PROJ_NR、PROJ_BENÄMNING 也是如此。
因为如果我删除该行,当我尝试在独立情况下调用它时,子例程会为该变量返回值 0。
Option Explicit
Public PROJ_NR As Integer
Public PROJ_BENÄMNING, SÖKVÄG_UPPDRAG, SÖKVÄG_PROJEKT As String
Public DATUM_LEV As Date
Public Sub ABE_Master()
Application.ScreenUpdating = False 'stänger av uppdatering av skärmen
Application.Calculation = xlCalculationManual 'stänger av omkalkyleringar
Call SKAPA_MAPP
Call SKAPA_WORD
Call SKAPA_CHECKLISTA
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Public Sub SKAPA_MAPP()
PROJ_NR = Range("PROJ_NR").value
PROJ_BENÄMNING = Range("PROJ_BENÄMNING").value
DATUM_LEV = Range("DATUM_LEV").value
SÖKVÄG_UPPDRAG = "G:\Administrativt\Automattillverkning av dokument\Zebastian"
SÖKVÄG_PROJEKT = DATUM_LEV & "_" & PROJ_NR & "_" & PROJ_BENÄMNING
If Len(Dir(SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT, vbDirectory)) > 0 Then
MsgBox "Uppdragsmapp finns redan, inga åtgärder utförda", vbInformation, ""
Exit Sub
End If
MkDir SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT
MkDir SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT & "\" & "Mail"
MkDir SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT & "\" & "Underlag"
MkDir SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT & "\" & "Leverans " & "[" & Year(Date) & "]-xx-xx"
End Sub
Public Sub SKAPA_CHECKLISTA()
PROJ_NR = Range("PROJ_NR").value
PROJ_BENÄMNING = Range("PROJ_BENÄMNING").value
DATUM_LEV = Range("DATUM_LEV").value
SÖKVÄG_UPPDRAG = "G:\Administrativt\Automattillverkning av dokument\Zebastian"
SÖKVÄG_PROJEKT = DATUM_LEV & "_" & PROJ_NR & "_" & PROJ_BENÄMNING
If Len(Dir(SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT & "\" & PROJ_NR & "_" & PROJ_BENÄMNING &
"_Checklista.xlsm", vbNormal)) > 0 Then
MsgBox "Checklista finns redan, inga åtgärder utförda", vbInformation, ""
Exit Sub
End If
Dim Wb As Workbook
Set Wb = Workbooks.Add
Wb.SaveAs Filename:=(SÖKVÄG_UPPDRAG & "\" & SÖKVÄG_PROJEKT & "\" & PROJ_NR & "_" &
PROJ_BENÄMNING & "_Checklista.xlsm"), FileFormat:=52
Wb.Close
End Sub
【问题讨论】:
-
Public Const SÖKVÄG_UPPDRAG = "G:\Administrativt\Automattillverkning av dokument\Zebastian"而不是Public SÖKVÄG_UPPDRAG? -
@АлексейР 当我必须从工作簿中的某个范围内获取变量 PROJ_NR 时也是如此。常量在那里也可以工作吗?
-
是的。在最顶部声明
Public Const SÖKVÄG_UPPDRAG As String = "G:\Administrativt\Automattillverkning av dokument\Zebastian",然后您可以在SKAPA_MAPP()或SKAPA_CHECKLISTA()中使用变量SÖKVÄG_UPPDRAG。但请记住,您将无法在过程中更改该变量的值,因为它现在是一个常量值。 -
@SiddharthRout 太好了,现在其他变量呢,在我运行 dir 的 if 长度 > 1 之前必须插入 PROJ_NR = Range("PROJ_NR").value。否则变量当我想独立运行子例程时为空。
-
对不起,我没明白你的意思?