Excel VBA脚本,用于相应地创建新工作表和编辑公式

时间:2014-02-18 15:32:02

标签: excel vba excel-vba

这看起来似乎微不足道,但我几周都无法得到任何我需要做的提示。

我有为我创建模板的脚本。它是每日报告,所以它确实为每个月的每一天创建了相同的表。但是,我还需要这个来更新此模板中的公式。

我有2个文件。让我们称他们为SOURCERESULTSSOURCE每月有2个工作表。 A1中有一些数据。我有一个脚本,可以根据模板为每月的每一天创建RESULTS

但是每张工作表(每天)都引用SOURCE中的相同位置,因为它只是用公式复制表格。因此,我最终获得了28个工作表的结果,其中每个 日公式中的SOURCE的1.Feb表

我需要每个工作表来指代相应的日期。所以结果1.Feb的工作表是指SOURCE的1.Feb。结果2.Feb指的是SOURCE的2.Feb ..等等。

有人可以帮忙吗?

这是代码

Private Sub Workbook_Open()
    Dim odpoved As Integer
    odpoved = MsgBox("Tento program ti pripravi prazdnu predlohu na XXX." & Chr(13) & "Pre pokracovanie stlac OK, pre ukoncenie programu alebo editaciu" & Chr(13) & "predlohy stlac Cancel!", vbOKCancel, "Welcome!")
    Select Case odpoved
        Case vbOK
            If odpoved = vbOK Then
                Call test
            End If
        Case vbCancel
            If odpoved = vbCancel Then
                MsgBox ("Proces ukonceny uzivatelom")
                GoTo Line2
            End If
    End Select
Line2:
End Sub


Sub test()
    '
    ' Open and work Macro
    '
    Dim selected_month As Long
    Dim day_count As Integer
    Dim day_loop As Integer
    Dim najdi_cestu As String
    najdi_cestu = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = True
    'Input Box to get the month number user wants to work with
Line1:
    selected_month = 13
    While (selected_month < 1) Or (selected_month > 12)
        selected_month = Val(InputBox("Zadaj poradove cislo mesiaca"))

        If selected_month = 0 Then Exit Sub
    Wend
    'Script above will loop until 0 or 1 - 12 are inserted
    '
    'Select Case tells how many days there are in the selected month
    Select Case selected_month
        Case 4, 6, 9, 11
            day_count = 30
        Case 1, 3, 5, 7, 8, 10, 12
            day_count = 31
        Case Else
            day_count = 28
    End Select
    '
    For day_loop = day_count To 1 Step -1
        Sheets("Template").Copy Before:=Sheets(2)
        ActiveSheet.Name = day_loop & "." & Left(MonthName(selected_month), 3)
    Next day_loop
    Application.DisplayAlerts = False
    Sheets("Template").Delete
    ' Auto pathfinder
    ActiveWorkbook.SaveAs Filename:=najdi_cestu & "Zmenový priebeh výroby " & Format(MonthName(selected_month)) & ".xlsx", FileFormat:= _
    xlOpenXMLWorkbook

    MsgBox ("Tvoja predloha na mesiac " & Format(MonthName(selected_month)) & " bola ulozena do: " & najdi_cestu)
    ' manualny save
    'ActiveWorkbook.SaveAs Filename:="C:\Users\pz595v\Desktop\Finalna verzia\" & Format(MonthName(selected_month)) & ".xlsx", FileFormat:= _
    '    xlOpenXMLWorkbook
Line3:
End Sub

2 个答案:

答案 0 :(得分:0)

要回答帖子标题“Excel VBA脚本以创建新工作表并相应地编辑公式”,您可以创建新工作表并编辑其公式:

'creates a new sheet
    Dim wrkSheet As Worksheet
    set wrkSheet = Worksheets.Add("Worksheet Name")
'changes forumula
wrkSheet.cells(1, 1) = "=B1+C1"

答案 1 :(得分:0)

不是答案,而是像这样; Select Case就像If,所以当你写:

Select Case odpoved
    Case vbOK
        If odpoved = vbOK Then
            Call test
        End If
    Case vbCancel
        If odpoved = vbCancel Then
            MsgBox ("Proces ukonceny uzivatelom")
            GoTo Line2
        End If
End Select

你应该这样写:

Select Case odpoved
    Case vbOK 'this line checks if odpoved = vbOK
        Call test
    Case vbCancel 'this line checks if odpoved = vbCancel
        MsgBox ("Proces ukonceny uzivatelom")
        GoTo Line2
End Select

由于odpoved已经检查了条件Select Case