【问题标题】:Save worksheet to a new workbook with the same format and name from a specific cell将工作表保存到特定单元格中具有相同格式和名称的新工作簿
【发布时间】:2019-11-16 09:33:27
【问题描述】:

我想将整个工作表保存到一个新工作簿中,以具有相同的格式,新工作簿的名称将基于特定单元格。

我有以下代码:

Sub cautare_copiere()

'1. declar si setez variabilele
'2. sterg rezultatele vechi
'3. cauta si lipeste intr-un nou tab

Dim datasheet As Worksheet 'de unde este informatia copiata
Dim raportsheet As Worksheet 'unde este copiata informatia
Dim salveaza As Worksheet 'unde se copiaza informatia pentru output
Dim familie As String
Dim ultimulrand As Integer
Dim i As Integer 'numaram randurile

'setez variable

Set datasheet = Sheet1
Set raportsheet = Sheet2
Set salveaza = Sheet4
familie = raportsheet.Range("B2").Value
valoare = raportsheet.Range("D2").Value
cantitate = raportsheet.Range("F2").Value


'sterge datele din tab-ul Raport
salveaza.Range("A5:L200").ClearContents 'ajustez range-ul de unde sterg datele - daca am informatie multa, il maresc
salveaza.Range("A5:L200").ClearFormats



'se duce in tab-ul Copy, cauta si copiaza
datasheet.Select
ultimulrand = Cells(Rows.Count, 1).End(xlUp).Row

'cauta printre randuri si selecteaza informatia pe care o cautam

With datasheet
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
        If .Cells(i, 5) = familie And .Cells(i, 8) <= valoare And _
                                      .Cells(i, 7) <= cantitate Then
            'Copierea unui range este relativa la rand....
            .Rows(i).Range("A1,C1,E1:H1").Copy _
                    salveaza.Range("A200").End(xlUp).Offset(1, 0)

        End If
    Next i
End With

'aranjeaza in ordine crescatoare, formateaza pagina si adauga anumite valori inainte de salvare
With salveaza
    .Range("A5:L200").Sort Key1:=.Range("F5"), Order1:=xlAscending 'sorteaza in coloana F in ordine crescatoare
    .Range("A2").MergeArea.Value = .Range("C5") 'adauga valoare in casuta

End With

'selecteaza casuta B2 din Raport dupa ce a terminat de copiat informatia
With raportsheet

   .Select
    .Range("B2").Select

End With

End Sub

它将数据从 Sheet1 复制到 Output 表,然后返回到 Raport 表。我想将输出表保存到新工作簿并从 Raport 表名称另存为 B2 值。

谢谢!

【问题讨论】:

  • 在搜索框中输入[vba] copy worksheet to new workbook。在撰写本文时,1916 的结果是第一个提供了一个代码示例,该示例适用于对您的案例进行少量修改。
  • 我想在代码中加入一些东西,因为我是 VBA 的新手。感谢您的回答。我会弄清楚的....

标签: excel vba


【解决方案1】:

我认为您正在寻找类似的东西。

Sub cautare_copiere()

'1. declar si setez variabilele
'2. sterg rezultatele vechi
'3. cauta si lipeste intr-un nou tab

Dim datasheet As Worksheet 'de unde este informatia copiata
Dim raportsheet As Worksheet 'unde este copiata informatia
Dim salveaza As Worksheet 'unde se copiaza informatia pentru output
Dim familie As String
Dim ultimulrand As Integer
Dim i As Integer 'numaram randurile

'setez variable

Set datasheet = Sheet1
Set raportsheet = Sheet2
Set salveaza = Sheet4
familie = raportsheet.Range("B2").Value
valoare = raportsheet.Range("D2").Value
cantitate = raportsheet.Range("F2").Value


'sterge datele din tab-ul Raport
salveaza.Range("A5:L200").ClearContents 'ajustez range-ul de unde sterg datele - daca am informatie multa, il maresc
salveaza.Range("A5:L200").ClearFormats



'se duce in tab-ul Copy, cauta si copiaza
datasheet.Select
ultimulrand = Cells(Rows.Count, 1).End(xlUp).Row

'cauta printre randuri si selecteaza informatia pe care o cautam

With datasheet
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
        If .Cells(i, 5) = familie And .Cells(i, 8) <= valoare And _
                                      .Cells(i, 7) <= cantitate Then
            'Copierea unui range este relativa la rand....
            .Rows(i).Range("A1,C1,E1:H1").Copy _
                    salveaza.Range("A200").End(xlUp).Offset(1, 0)

        End If
    Next i
End With

'aranjeaza in ordine crescatoare, formateaza pagina si adauga anumite valori inainte de salvare
With salveaza
    .Range("A5:L200").Sort Key1:=.Range("F5"), Order1:=xlAscending 'sorteaza in coloana F in ordine crescatoare
    .Range("A2").MergeArea.Value = .Range("C5") 'adauga valoare in casuta

End With

'selecteaza casuta B2 din Raport dupa ce a terminat de copiat informatia
With raportsheet

Dim xPath As String

xPath = Application.ActiveWorkbook.path
    raportsheet.Copy
    Application.ActiveWorkbook.SaveAs fileName:=xPath & "\" & .Range("B2").Value, FileFormat:=51 'Change file name to suit your needs
    Application.ActiveWorkbook.Close False


End With

End Sub

【讨论】:

  • 谢谢,但我想要的是在执行搜索时运行,并使用 Raport 工作表 B2 中的条件创建一个名称为新的工作簿 ....
  • 脚本确实有效,但它将整个工作簿保存为一个新文件,而不仅仅是输出工作表。我需要另存为仅包含输出工作表的新工作簿。谢谢!
  • @AndreiK 嗯...好吧,我的 for 循环中有我的,但它应该仍然可以工作。你现在可以再试一次吗?做一个小改动也许会有所帮助。
  • 您的公式完美运行,但在创建新工作簿时,它会复制整个工作簿并使用单元格 B2 中的名称保存。我在主工作簿上有 4 个工作表。 (1)Sheet1 (2)Raport (3) 输出和 (4) 数据。在 Raport 工作表上,当我按下搜索按钮时,它会将数据从 Sheet1 复制到输出。我只需要将输出工作表保存到不同的工作簿并保存为 Raport 工作表中单元格 B2 的名称。您的代码将所有内容复制到新工作簿中。
  • 我可以和你分享这个文件,也许它会让你更好地了解我需要什么
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2019-04-08
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多