1

このコードを短くて速くする方法があることは知っていますが、私はそれを達成するにはあまりにも初心者のようです。いくつかのセルをマージしました(これは「標準」であるはずの形式ですが、ユーザーはそれをいじり続け、使用するマクロは大量のエラーを出し、情報を収集しません)。私がこれまでに何とかしてきたことは、「標準」フォームを再び開き、ユーザーのフォームからすべてのデータを入力する別のコードを作成することでした。

それは魅力のように機能しますが、それを単純化する方法がわからないので、今は見たり聞いたりするのにうんざりしています(それはあなたにとってばかげているに違いないことを知っていますが、それができないという事実を受け入れることはできません-また「すべての強力な」VBAが非常に小さなことのために非常に多くのコードを書くのに何年もかかる必要があることを私は受け入れることができません)。

Application.ScreenUpdating = False
ActiveWindow.ActivatePrevious
Workbooks.Open Filename:="...\Standard Formular.xls"
Sheets("Formulaire - Form").Select
ActiveWindow.ActivateNext
Range("E9").Copy
ActiveWindow.ActivatePrevious
Range("E9").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E11").Copy
ActiveWindow.ActivatePrevious
Range("E11").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E13").Copy
ActiveWindow.ActivatePrevious
Range("E13").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E15").Copy
ActiveWindow.ActivatePrevious
Range("E15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E17").Copy
ActiveWindow.ActivatePrevious
Range("E17").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E19").Copy
ActiveWindow.ActivatePrevious
Range("E19").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Range("E21").Select
ActiveCell.FormulaR1C1 = Date
ActiveWindow.ActivateNext
Range("E28").Copy
ActiveWindow.ActivatePrevious
Range("E28").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E30").Copy
ActiveWindow.ActivatePrevious
Range("E30").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E32").Copy
ActiveWindow.ActivatePrevious
Range("E32").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E34").Copy
ActiveWindow.ActivatePrevious
Range("E34").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E36").Copy
ActiveWindow.ActivatePrevious
Range("E36").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E38").Copy
ActiveWindow.ActivatePrevious
Range("E38").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E48").Copy
ActiveWindow.ActivatePrevious
Range("E48").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E50").Copy
ActiveWindow.ActivatePrevious
Range("E50").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E52").Copy
ActiveWindow.ActivatePrevious
Range("E52").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E54").Copy
ActiveWindow.ActivatePrevious
Range("E54").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E63").Copy
ActiveWindow.ActivatePrevious
Range("E63").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("G63").Copy
ActiveWindow.ActivatePrevious
Range("G63").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("C65").Copy
ActiveWindow.ActivatePrevious
Range("C65").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("D65").Copy
ActiveWindow.ActivatePrevious
Range("D65").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E65").Copy
ActiveWindow.ActivatePrevious
Range("E65").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("F65").Copy
ActiveWindow.ActivatePrevious
Range("F65").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("G65").Copy
ActiveWindow.ActivatePrevious
Range("G65").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E67").Copy
ActiveWindow.ActivatePrevious
Range("E67").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("A72").Copy
ActiveWindow.ActivatePrevious
Range("A72").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("G72").Copy
ActiveWindow.ActivatePrevious
Range("G72").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
Range("E97").Copy
ActiveWindow.ActivatePrevious
Range("E97").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
ActiveWindow.ActivateNext
ActiveWindow.Close
Application.ScreenUpdating = True

私を助けるために時間を作ってくれてありがとう!

4

2 に答える 2

0

コピー先およびコピー元のシートを変数に保存します。

wsU = Sheets("Sheet name on user form goes here")
Workbooks.Open Filename:="...\Standard Formular.xls"
wsF = Sheets("Formulaire - Form")

これで、どのシートがアクティブになるかをフリップフロップする代わりに、コピーアンドペーストを使用する代わりに、クリップボードが関係し、このマクロの実行中に別のアプリケーションでコピーアンドペーストを開始しようとすると混乱する可能性があります。これを試してください。

wsF.Range("E9").value = wsU.Range("E9").value

ところで、これの良い速記は

wsF.[E9] = wsU.[E9]
于 2013-03-20T09:19:16.140 に答える
0

する

`sheet("Where i want to paste").range("xxx").value=sheet("Data im copiing").range("yyy").value`

たとえば、最初のコピーは次のようになります。

Sheets("名前がわからない").range("E9").value=Sheets("Formulaire - Form").Range("E9").value

于 2013-03-20T09:19:01.850 に答える