Kesalahan yang menjebak dengan Visual Basic untuk aplikasi

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 146864 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Ketika galat run-time terjadi di Microsoft Visual Basic untuk aplikasi makro, pesan kesalahan muncul di layar, dan makro perhentian atau berperilaku tak terduga.

Untuk mencegah aplikasi dari menabrak atau berperilaku tak terduga, Anda dapat mencantumkan kode makro yang penyadapan kesalahan dan memberitahu makro bagaimana untuk mengatasinya. Proses intercepting dan penanganan kesalahan adalah disebut "kesalahan perangkap." Set petunjuk yang memberitahu aplikasi bagaimana menangani kesalahan disebut "penanganan kesalahan rutinitas" atau "kesalahan handler."

INFORMASI LEBIH LANJUT

Microsoft menyediakan contoh pemrograman hanya sebagai ilustrasi, tanpa jaminan apa pun baik tersurat maupun tersirat. Termasuk, namun tidak terbatas pada, jaminan tersirat mengenai kelayakan untuk diperdagangkan atau kesesuaian untuk keperluan tertentu. Artikel ini mengasumsikan bahwa Anda telah terbiasa dengan bahasa pemrograman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan mendebug prosedur. Teknisi dukungan Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, namun mereka tidak akan memodifikasi contoh untuk memberikan fungsionalitas tambahan atau menyusun prosedur untuk memenuhi persyaratan khusus Anda. Sementara kode Visual Basic berjalan, Anda mungkin Temui beberapa jenis kesalahan yang mungkin. Anda dapat mengambil keuntungan dari kesalahan perangkap di Microsoft Excel dengan menggunakan fungsi-fungsi berikut dan pernyataan.

Pada pernyataan kesalahan

Pernyataan pada kesalahan menyebabkan Visual Basic untuk aplikasi untuk mulai atau berhenti kesalahan perangkap. Pernyataan pada kesalahan juga menentukan satu set pernyataan untuk melaksanakan jika terjadi kesalahan.

Untuk tambahan informasi, silakan lihat artikel berikut pada Basis Pengetahuan Microsoft:
141571Cara menggunakan "Pada kesalahan" untuk menangani kesalahan dalam makro

Err fungsi

Err fungsi mengembalikan jumlah kesalahan yang ditemui.

Contoh menggunakan fungsi Err:
   Msgbox "The most recent error number is " & Err & _
      ". Its message text is: " & Error(Err)
				
Tabel berikut berisi daftar trappable kesalahan kode Anda mungkin mengalami ketika Anda menggunakan fungsi Err.
   Error code   Error message
   ----------   -------------
   3            Return without GoSub
   5            Invalid procedure call
   6            Overflow
   7            Out of memory
   9            Subscript out of range
   10           Duplicate definition (versions 5.0 and 7.0)
   10           This array is fixed or temporarily locked (version97)
   11           Division by zero
   13           Type mismatch
   14           Out of string space
   16           String formula too complex (versions 5.0 and 7.0)
   16           Expression too complex (version 97)
   17           Can't perform requested operation
   18           User interrupt occurred
   20           Resume without error
   28           Out of stack space
   35           Sub or function not defined (versions 5.0 and 7.0)
   35           Sub, function, or property not defined (version 97)
   47           Too many DLL application clients (version 97)
   48           Error in loading DLL
   49           Bad DLL calling convention
   51           Internal error
   52           Bad file name or number
   53           File not found
   54           Bad file mode
   55           File already open
   57           Device I/O error
   58           File already exists
   59           Bad record length
   61           Disk full
   62           Input past end of line
   63           Bad record number
   67           Too many files
   68           Device unavailable
   70           Permission denied
   71           Disk not ready
   74           Can't rename with different drive
   75           Path/File access error
   76           Path not found
   91           Object variable not set (versions 5.0 and 7.0)
   91           Object variable or With block variable not set
                (version 97)
   92           For Loop not initialized
   93           Invalid pattern string
   94           Invalid use of Null
   95           User-defined error (versions 5.0 and 7.0 only)
   298          System DLL could not be loaded (version 97)
   320          Can't use character device names in specified file names
                (version 97)
   321          Invalid file format (version 97)
   322          Can't create necessary temporary file (version 97)
   323          Can't load module; invalid format (versions 5.0 and 7.0)
   325          Invalid format in resource file (version 97)
   327          Data value named was not found (version 97)
   328          Illegal parameter; can't write arrays (version 97)
   335          Could not access system registry (version 97)
   336          ActiveX component not correctly registered (version 97)
   337          ActiveX component not found (version 97)
   338          ActiveX component did not correctly run (version 97)
   360          Object already loaded (version 97)
   361          Can't load or unload this object (version 97)
   363          Specified ActiveX control not found (version 97)
   364          Object was unloaded (version 97)
   365          Unable to unload within this context (version 97)
   368          The specified file is out of date. This program requires
                a newer version (version 97)
   371          The specified object can't be used as an owner form for
                Show (version 97)
   380          Invalid property value (version 97)
   381          Invalid property-array index (version 97)
   382          Property Set can't be executed at run time (version 97)
   383          Property Set can't be used with a read-only property
                (version 97)
   385          Need property-array index (version 97)
   387          Property Set not permitted (version 97)
   393          Property Get can't be executed at run time (version 97)
   394          Property Get can't be executed on write-only property
                (version 97)
   400          Form already displayed; can't show modally (version 97)
   402          Code must close topmost modal form first (version 97)
   419          Permission to use object denied (version 97)
   422          Property not found (version 97)
   423          Property or method not found
   424          Object required
   425          Invalid object use (version 97)
   429          ActiveX component can't create object or return
                reference to this object (version 97)
   430          Class doesn't support OLE Automation
   430          Class doesn't support Automation (version 97)
   432          File name or class name not found during Automation
                operation (version 97)

   438          Object doesn't support this property or method
   440          OLE Automation error
   440          Automation error (version 97)
   442          Connection to type library or object library for remote
                process has been lost (version 97)
   443          Automation object doesn't have a default value
                (version 97)
   445          Object doesn't support this action
   446          Object doesn't support named arguments
   447          Object doesn't support current locale settings
   448          Named argument not found
   449          Argument not optional
   449          Argument not optional or invalid property assignment
                (version 97)
   450          Wrong number of arguments
   450          Wrong number of arguments or invalid property assignment
                (version 97)
   451          Object not a collection
   452          Invalid ordinal
   453          Specified DLL function not found
   454          Code resource not found
   455          Code resource lock error
   457          This key is already associated with an element of this
                collection (version 97)
   458          Variable uses a type not supported in Visual Basic
                (version 97)
   459          This component doesn't support events (version 97)
   460          Invalid clipboard format (version 97)
   461          Specified format doesn't match format of data
                (version 97)
   480          Can't create AutoRedraw image (version 97)
   481          Invalid picture (version 97)
   482          Printer error (version 97)
   483          Printer driver does not support specified property
                (version 97)
   484          Problem getting printer information from the system.
                Make sure the printer is set up correctly (version 97)
   485          Invalid picture type (version 97)
   486          Can't print form image to this type of printer
                (version 97)
   735          Can't save file to Temp directory (version 97)
   744          Search text not found (version 97)
   746          Replacements too long (version 97)
   1000         Classname does not have propertyname property
                (versions 5.0 and 7.0)
   1001         Classname does not have methodname method
                (versions 5.0 and 7.0)
   1002         Missing required argument argumentname
                (versions 5.0 and 7.0)
   1003         Invalid number of arguments (versions 5.0 and 7.0)
   1004         Methodname method of classname class failed
                (versions 5.0 and 7.0)
   1005         Unable to set the propertyname property of the classname
                class (versions 5.0 and 7.0)
   1006         Unable to get the propertyname property of the classname

                class (versions 5.0 and 7.0)
   31001        Out of memory (version 97)
   31004        No object (version 97)
   31018        Class is not set (version 97)
   31027        Unable to activate object (version 97)
   31032        Unable to create embedded object (version 97)
   31036        Error saving to file (version 97)
   31037        Error loading from file (version 97)
				
Untuk informasi tambahan, silakan lihat artikel berikut di Basis Pengetahuan Microsoft:
142138DARI: Penjelasan dari Trappable kesalahan dalam Visual Basic untuk aplikasi

Kesalahan fungsi

Kesalahan fungsi mengembalikan pesan galat yang berkaitan dengan sejumlah kesalahan tertentu.

Contoh menggunakan fungsi kesalahan:
   Msgbox "The message text of the error is: " & Error(Err)
				

Kesalahan pernyataan

Pernyataan kesalahan mensimulasikan terjadinya kesalahan oleh memungkinkan Anda untuk menetapkan beberapa kesalahan kustom untuk fungsi Err. Pengguna ini- nilai-nilai didefinisikan kesalahan adalah nilai-nilai yang Anda tetapkan untuk prosedur Anda dan bahwa selalu disimpan dalam variabel tipe data varian. Penggunaan umum ini jenis kesalahan nilai adalah prosedur yang menerima beberapa argumen dan kembali nilai. Misalnya, nilai kembali ini berlaku hanya jika argumen jatuh dalam jarak tertentu. Prosedur Anda dapat menguji argumen yang menyediakan pengguna, dan jika argumen tidak dalam kisaran yang dapat diterima, Anda dapat memiliki prosedur yang mengembalikan nilai sesuai kesalahan.

Kesalahan subtipe tipe data varian dan ketika istilah "kesalahan nilai" digunakan, itu biasanya berarti bahwa variabel adalah jenis varian, dan bahwa hal itu berisi nilai yang Visual Basic for Applications mengakui sebagai kesalahan yang ditetapkan pengguna. Nilai-nilai kesalahan yang digunakan dalam sebuah prosedur untuk menunjukkan bahwa kondisi kesalahan telah terjadi. Tidak seperti biasa run-time kesalahan, kesalahan ini tidak mengganggu Anda kode karena mereka diakui sebagai variabel biasa dan tidak kesalahan. Anda prosedur dapat menguji untuk nilai-nilai kesalahan ini dan mengambil sesuai perbaikan tindakan.

Anda juga dapat menggunakan pernyataan kesalahan untuk mensimulasikan run-time kesalahan. Hal ini sangat berguna ketika Anda menguji aplikasi Anda, atau Bila Anda ingin memperlakukan kondisi tertentu sebagai setara dengan menjalankan- kesalahan. Setiap Visual Basic for Applications galat run-time dapat disimulasikan dengan menyediakan kode kesalahan untuk kesalahan dalam pernyataan kesalahan. Anda juga dapat menggunakan pernyataan kesalahan untuk membuat Anda sendiri kesalahan yang ditetapkan pengguna dengan menyediakan kode kesalahan yang tidak sesuai dengan Visual Basic untuk aplikasi run-time kesalahan. Tabel yang berisi daftar built-in kesalahan muncul di awal ini Artikel (di bawah bagian "Err fungsi"). Saat ini, Visual Basic untuk Aplikasi tidak menggunakan semua nomor yang tersedia untuk built-in kesalahan. Dalam masa depan rilis dari Visual Basic for Applications, nomor internal akan meningkatkan sebagai lebih dibangun - pada kesalahan ditambahkan. Disarankan bahwa Anda mulai Anda nomor kesalahan 50.000 dan kerja jalan ke 65.535 untuk menghindari kemungkinan konflik di masa depan.

Contoh menggunakan pernyataan kesalahan untuk mensimulasikan Run-time kesalahan:
   Sub Test()

      On Error Resume Next
      Error 50000          'set the value of Err to 50000

      If Err = 50000 Then
         MsgBox "my own error occurred"
      End If

   End Sub
				
Ketika makro tes berjalan, Anda menerima pesan kotak yang berisi "saya terjadi kesalahan sendiri"sebagai pesan.

CVErr fungsi

Fungsi CVErr digunakan untuk menciptakan nilai-nilai kesalahan. CVErr fungsi mengambil argumen yang harus baik menjadi integer atau variabel yang berisi integer.
   NoRadius = CVErr(2010)

   NotANumber = 2020
   InvalidArgument = CVErr(NotANumber)
				
Contoh menggunakan CVErr fungsi:
   Public NoRadius, NotANumber

   Sub AreaOfCircle()
      Const PI = 3.142
      NoRadius = CVErr(2010)
      NotANumber = CVErr(2020)
      Radius = CheckData(InputBox("Enter the radius: "))
      If IsError(Radius) Then
         Select Case Radius
            Case NoRadius
               MsgBox "Error: No radius given."
            Case NotANumber
               MsgBox "Error: Radius is not a number."
            Case Else
               MsgBox "Unknown Error."
         End Select
      Else
         MsgBox "The area of the circle is " & (PI * Radius ^ 2)
      End If
   End Sub

   Function CheckData(TheRadius)
      If Not IsNumeric(TheRadius) Then
         CheckData = NotANumber
      ElseIf TheRadius = 0 Then
         CheckData = NoRadius
      Else
         CheckData = TheRadius
      End If
   End Function
				

Menggunakan Built-In nilai-nilai kesalahan

Ada tujuh nilai-nilai built-in kesalahan dalam Microsoft Excel. The Tabel di bawah menunjukkan nomor kesalahan (konstan), nilai literal kesalahan, dan kesalahan dikonversi nilai.
Error number (Constant)   Literal error value     Converted error value
-----------------------------------------------------------------------

xlErrDiv0                   [#DIV/0!]               CVErr(xlErrDiv0)
xlErrNA                     [#N/A]                  CVErr(xlErrNA)
xlErrName                   [#NAME?]                CVErr(xlErrName)
xlErrNull                   [#NULL!]                CVErr(xlErrNull)
xlErrNum                    [#NUM!]                 CVErr(xlErrNum)
xlErrRef                    [#REF!]                 CVErr(xlErrRef)
xlErrValue                  [#VALUE!]
CVErr(xlErrValue)
				
Anda bekerja dengan nilai-nilai kesalahan built-in lembar kerja ini dengan cara yang sama Anda bekerja dengan kesalahan yang ditetapkan pengguna--seperti nomor dikonversi ke nilai-nilai kesalahan menggunakan fungsi CVErr. Satu-satunya perbedaan adalah bahwa kesalahan lembar kerja, Visual Basic for Applications menyediakan nomor kesalahan sebagai konstanta built-in dan juga menyediakan nilai-nilai literal kesalahan. Item ini tidak disediakan untuk nilai-nilai yang ditetapkan pengguna kesalahan. Nilai-nilai literal kesalahan harus tertutup di square kurung seperti yang ditunjukkan dalam tabel di atas.

Contoh menggunakan Built-In Error Nilai-nilai:
   Function Commission(SharesSold,PricePerShare)
      If Not (IsNumeric(SharesSold) And IsNumeric(PricePerShare)) Then
         Commission = CVErr(xlErrNum)
      Else
         TotalSalePrice = ShareSold * PricePerShare
         If TotalSalePrice <= 15000 Then
            Commission = 25 + 0.03 * SharesSold
         Else
            Commission = 25 + 0.03 * (0.9 * SharesSold)
         End If
      End If
   End Function
				

Pemusatan penanganan kode kesalahan

Ketika Anda menambahkan kode penanganan kesalahan untuk Anda Visual Basic untuk Aplikasi macro, Anda akan menemukan bahwa kesalahan yang sama sedang ditangani lagi dan lagi. Anda dapat mengurangi ukuran kode Anda dan usaha diperlukan untuk menulis kode dengan menulis beberapa prosedur yang penanganan kesalahan Anda kode dapat menelepon untuk menangani situasi kesalahan umum.

Berikut contoh dari sebuah fungsi prosedur yang menampilkan pesan yang sesuai dengan kesalahan yang telah terjadi, dan di mana mungkin, memungkinkan pengguna untuk menentukan apa untuk mengambil tindakan berikutnya dengan memilih tombol tertentu. Kemudian kembali nomor kode untuk prosedur yang disebut itu.
   Public Const RESUME_STATEMENT = 0   'Resume
   Public Const RESUME_NEXT = 1        'Resume Next
   Public Const UNRECOVERABLE = 2      'Unrecoverable error
   Public Const UNRECOGNIZED = 3       'Unrecognized error
   Public Const ERR_DEVICEUNAVAILABLE = 68
   Public Const ERR_BADFILENAMEORNUMBER = 52
   Public Const ERR_PATHDOESNOTEXIST = 76
   Public Const ERR_BADFILEMODE = 54


  Function FileErrors(errVal As Integer) As Integer
   Dim MsgType As Integer, Msg As String, Response As Integer
      MsgType = vbExalamation
      Select Case errVal
         Case ERR_DEVICEUNAVAILABLE     'Error #68
            Msg = "That device is unavailable."
            MsgType = MsgType + vbAbortRetryIgnore
         Case BADFILENAMEORNUMBER      'Errors #64 & 52
            Msg = "That filename is not valid."
            MsgType = MsgType + vbOKCancel
         Case PATHDOESNOTEXIST      'Error #76
            Msg = "That path does not exist."
            MsgType = MsgType + vbOKCancel
         Case BADFILEMODE      'Error #54
            Msg = "Can not open the file for that type of access."
            MsgType = MsgType + vbOKCancel
         Case Else
            FileErrors = UNRECOGNIZED
            Exit Function
      End Select
      Response = MsgBox(Msg, MsgType, "Disk Error")
      Select Case Response
         Case vbOK, vbRetry
            FileErrors = RESUME_STATEMENT
         Case vbIgnore
            FileErrors = RESUME_NEXT
         Case vbCancel, vbAbort
            FileErrors = UNRECOVERABLE
         Case Else
            FileErrors = UNRECOGNIZED
      End Select
   End Function
				

Penanganan pengguna menyela

Pengguna dapat mengganggu Visual Basic untuk aplikasi prosedur oleh menekan CTRL + BREAK atau ESC (perintah + periode pada Macintosh). Mungkin untuk menonaktifkan menyela prosedur dalam aplikasi Anda selesai. Namun, jika Anda tidak menonaktifkan menyela pengguna dalam prosedur selesai, Anda dapat membuat yakin bahwa prosedur Anda diberitahu ketika menyela telah terjadi begitu itu dapat menutup file, lepaskan dari sumber daya bersama, atau mengembalikan diubah variabel sebelum kembali kontrol aplikasi untuk pengguna.

Anda bisa menjebak pengguna menyela prosedur Anda dengan menetapkan EnableCancelKey properti untuk xlErrorHandler. Bila properti ini diatur, menyela semua akan menghasilkan run-time kesalahan nomor 18, yang dapat terjebak dengan menggunakan pada kesalahan pernyataan. Anda dapat menangani kesalahan untuk menghentikan prosedur dan keluar dari program. Jika pernyataan Resume digunakan untuk melanjutkan prosedur setelah terjebak galat run-time, menyela diabaikan.

Hal ini juga mungkin untuk mengabaikan pengguna menyela sepenuhnya dengan menetapkan properti EnableCancelKey xlDisabled. Dalam keadaan ini, Microsoft Excel mengabaikan semua upaya oleh pengguna untuk mengganggu prosedur berjalan. Untuk memulihkan pengolahan menyela default, mengubah pengaturan properti EnableCancelKey untuk xlInterrupt. Untuk mencegah prosedur dari secara permanen menonaktifkan pengguna menyela, Microsoft Excel selalu memulihkan pengaturan default properti EnableCancelKey untuk xlInterrupt setiap kali prosedur melengkapi pelaksanaannya. Untuk memastikan bahwa menyela ditangani dengan benar dalam kode Anda, Anda harus secara eksplisit menonaktifkan atau perangkap menyela setiap kali prosedur dijalankan. Perlu dicatat bahwa hanya satu menyela handler dapat digunakan untuk setiap prosedur, dan bahwa penangan sama digunakan untuk semua kesalahan runtime yang dihadapi oleh prosedur.

The contoh berikut menunjukkan prosedur yang memerlukan periode besar waktu untuk menyelesaikan. Jika pengguna menyela prosedur, kesalahan terjebak. Pengguna menyela pertama menegaskan bahwa prosedur harus benar-benar dihentikan dan kemudian keluar prosedur secara teratur.
   Sub ProcessData()
      'Set up a user interrupt trapping as a run-time error
      On Error GoTo UserInterrupt
      Application.EnableCancelKey = xlErrorHandler

      'Start a long duration task
      For x = 1 to 1000000
         For y = 1 to 10
         Next y
      Next x

      Exit Sub
   UserInterrupt:
      If Err = 18 Then
         If MsgBox ("Stop processing records?", vbYesNo) = vbNo Then
            'Continue running at the point procedure was interrupted
            Resume
         Else
            'Handle other errors that occur
            MsgBox Error(Err)
         End If
      End If
   End Sub
				
Jika Anda menjalankan makro ProcessData dan kemudian dengan cepat tekan CTRL + BREAK, kotak pesan yang meminta Anda Apakah untuk menghentikan pemrosesan catatan muncul. Jika Anda Klik Ya, kotak pesan lain dengan "pengguna menyela terjadi" muncul. Jika Anda Klik OK di kotak pesan ini, makro berakhir. Jika Anda mengklik No pertama kotak pesan, makro berlanjut.

Resume pernyataan

Pernyataan Resume resume pelaksanaan kode setelah kesalahan penanganan rutin telah selesai.

REFERENSI

Excel 97

Untuk informasi lebih lanjut tentang menjebak makro kesalahan, klik indeks tab di Microsoft Excel 97 Visual Basic bantuan, ketik teks berikut
kesalahan perangkap
kemudian klik dua kali teks yang dipilih untuk pergi ke "Trappable Kesalahan"topik.

Excel 7.0

Untuk informasi lebih lanjut tentang menjebak makro kesalahan, klik indeks tab di Microsoft Excel 7.0 bantuan, ketik teks berikut
kesalahan perangkap
kemudian klik dua kali teks yang dipilih untuk pergi ke "kesalahan perangkap"topik.

Excel 5.0

Dalam "Visual Basic User's Guide," versi 5.0, Bab 9, "penanganan Kesalahan dan kesalahan nilai,"lihat topik berikut:
  • "Mencegah kode dari menghentikan atau bertindak Tak terduga"
  • "Menciptakan nilai-nilai kesalahan yang tidak mengganggu Anda Kode"
  • "Menggunakan Built-in nilai-nilai kesalahan Microsoft Excel"
  • "Teknik lanjutan penanganan kesalahan"
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice. See Terms of Use for other considerations.

Properti

ID Artikel: 146864 - Kajian Terakhir: 15 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel 5.0 for Macintosh
Kata kunci: 
kbdtacode kbhowto kbprogramming kbmt KB146864 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:146864

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com