2013-09-04 4 views
0

Я разрываю волосы, пытаясь сделать то, что должно быть очень простой настройкой на макрос.Копирование содержимого текущей рабочей таблицы на созданный рабочий лист vba

копия и вставка, похоже, не работают. Я получаю свойство не поддерживается ошибка.

Все, что я пытаюсь сделать, это скопировать все содержимое ячейки из исходного ActiveSheet в инициирующей книге (которая будет зЫат) и вставить его в новой книге лист (rvname)

Вот мой текущий код: (мне нужно работать в Excel 2003 и 2007)

Sub create_format_wb() 
    'This macro will create a new workbook 
    'Containing sheet1,(job plan) Original, (job plan) Revised, and 1 sheet for each task entered in the inputbox. 


Dim Newbook As Workbook 
Dim i As Integer 
Dim sName As String 
Dim umName As String 
Dim rvName As String 
Dim tBox As Integer 
Dim jobplannumber As String 
Dim oldwb As String 


line1: 
tBox = Application.InputBox(prompt:="Enter Number of Tasks", Type:=1) 
If tBox < 1 Then 
MsgBox "Must be at least 1" 
GoTo line1 
Else 

sName = ActiveSheet.Name 
umName = (sName & " Original") 
rvName = (sName & " Revised") 
jobplannumber = sName 




Set Newbook = Workbooks.Add 
    With Newbook 
     .Title = sName 
     .SaveAs Filename:=(sName & " .xls") 
     .Application.SheetsInNewWorkbook = 1 
     .Sheets.Add(, After:=Sheets(Worksheets.Count)).Name = umName 
     Worksheets(umName).Range("A1").Select 
     With Worksheets(umName).QueryTables.Add(Connection:= _ 
      "ODBC;DSN=MX7PROD;Description=MX7PROD;APP=Microsoft Office 2003;WSID=USOXP-93BPBP1;DATABASE=MX7PROD;Trusted_Connection=Yes" _ 
      , Destination:=Range("A1")) 
      .CommandText = Array(_ 
      "SELECT jobplan_print.taskid, jobplan_print.description, jobplan_print.critical" & Chr(13) _ 
      & "" & Chr(10) & "FROM MX7PROD.dbo.jobplan_print jobplan_print" & Chr(13) & "" & Chr(10) _ 
      & "WHERE (jobplan_print.jpnum= '" & jobplannumber & "')") 
      .Name = "Query from MX7PROD" 
      .FieldNames = True 
      .RowNumbers = False 
      .FillAdjacentFormulas = False 
      .PreserveFormatting = True 
      .RefreshOnFileOpen = False 
      .BackgroundQuery = True 
      .RefreshStyle = xlInsertDeleteCells 
      .SavePassword = False 
      .SaveData = True 
      .AdjustColumnWidth = True 
      .RefreshPeriod = 0 
      .PreserveColumnInfo = True 
      .Refresh BackgroundQuery:=False 
     End With 
      .Worksheets(umName).UsedRange.Columns.AutoFit 
      .Sheets.Add(, After:=Sheets(Worksheets.Count)).Name = rvName 
      For i = 1 To tBox 
       .Sheets.Add(, After:=Sheets(Worksheets.Count)).Name = ("Task " & i) 
      Next i 
    End With 


    Worksheets(rvName).UsedRange.Columns.AutoFit 
End If 
End Sub 

Может Сомон ходить мне через, как идти об этом?

Любая помощь приветствуется.

+0

Шаг 1: Либо оберните вашу книгу в ловушку ошибок, либо создайте функцию именования, которая проверяет имена существующих книг в этом каталоге. Шаг 2: Вы можете добавить немного больше информации? Возможно, пример данных? Разработайте, как вы пытаетесь «скопировать» данные. Похоже, вы пытаетесь запросить информацию в документе, но вы говорите, что пытаетесь «скопировать/вставить» его? Возможно, я что-то неправильно читаю. – Lopsided

+0

Извините, что не яснее. –

+0

Вышеуказанный макрос работает просто отлично. Он создает новую рабочую книгу, запрашивает нашу внутреннюю базу данных и заполняет новые данные книги umName данными. Что мне нужно сделать, это скопировать все содержимое текущей текущей книги рабочей книги на вновь созданный лист rvName. –

ответ

1

Вы могли бы сделать что-то вроде этого:

Sub Copy() 
    Workbooks("Book1").Worksheets("Sheet1").Cells.Copy 
    Workbooks("Book2").Worksheets("Sheet1").Range("A1").Select 
    Workbooks("Book2").Worksheets("Sheet1").Paste 
End Sub 

FYI, если вы записываете макросы в Excel при выполнении операции, которые вы хотели бы код, вы часто можете получить то, что вы ищете с минимальными изменениями к автоматически создаваемому макрокоду.

+0

Я пробовал это, но я продолжал получать свойство, которое не поддерживается в части .paste ... –

+0

Спасибо всем. Все еще пытаюсь получить вид этого формата окна сообщения. –

+0

С вашего комментария в ответе Джо Махли, похоже, вы в конечном итоге заставили его работать на основе моего решения, не так ли? Не могли бы вы дать мне кредит, приняв это в качестве ответа? –

0

Вы считаете копирование рабочего листа в целом? Вот основной пример, вам нужно будет настроить организацию вашей организации и требования к именованию.

Sub CopyWkst() 
    Dim wksCopyMe As Worksheet 

    Set wksCopyMe = ThisWorkbook.Worksheets("Sheet1") 
    wksCopyMe.Copy After:=ThisWorkbook.Sheets(Worksheets.Count) 
    ThisWorkbook.ActiveSheet.Name = "I'm New!" 

End Sub 
1

Чтобы скопировать содержимое листа на другой существующие лист:

wsDest.UsedRange.Clear 'Clear the contents of the destination sheet 
wsSource.UsedRange.Copy Destination:=wsDest.Range("A1") 

Где wsSource и wsDest являются источником и назначениями рабочим листов соответственно.