Ambil perhatian
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba log masuk atau menukar direktori.
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
| Fungsi | Terpakai kepada |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Mengesan ralat dan memberikan nilai alternatif atau mengambil tindakan. Cipta ralat tersuai atau hantar melalui ralat.
Nota
Jika apl telah melumpuhkan ciri pengurusan ralat peringkat formula di bawah Kemas Kini>Tetapan>Dihentikan, fungsi tersebut tidak akan berfungsi dengan betul.
IfError
Fungsi ini IfError menguji nilai sehingga ia menemui ralat. Jika fungsi menemui ralat, fungsi akan menilai dan mengembalikan nilai penggantian yang sepadan dan menghentikan penilaian selanjutnya. Nilai lalai juga boleh dibekalkan ketika tiada ralat ditemui. Struktur menyerupai IfError fungsi If : IfError menguji ralat, manakala If menguji benar.
Gunakan IfError untuk menggantikan ralat dengan nilai yang sah supaya pengiraan hiliran boleh diteruskan. Sebagai contoh, gunakan fungsi ini jika input pengguna dapat menghasilkan pembahagian dengan sifar:
IfError( 1/x, 0 )
Formula ini kembali 0 jika nilai adalah x sifar, kerana 1/x menghasilkan ralat. Jika x bukan sifar, maka 1/x dikembalikan.
Menghentikan pemprosesan selanjutnya
Apabila formula perantaian bersama dalam formula tingkah laku, seperti:
Patch( DS1, ... );
Patch( DS2, ... )
Fungsi Patch kedua untuk DS2 akan dicuba walaupun jika Patch untuk DS1 gagal. Skop ralat adalah terhad pada setiap formula yang dirantai.
Gunakan IfError untuk melakukan tindakan dan hanya teruskan pemprosesan jika tindakan itu berjaya. Memohon IfError kepada contoh ini:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Jika Patch bagi DS1 mempunyai masalah, Notify pertama dilaksanakan. Tidak ada pemprosesan selanjutnya berlaku termasuk Patch kedua bagi DS2. Jika Tampalan pertama berjaya, Tampalan kedua akan dilaksanakan.
Jika dibekalkan, argumen DefaultResult pilihan akan dikembalikan jika tiada ralat ditemui. Tanpa argumen, argumen Nilai terakhir akan dikembalikan.
Berdasarkan contoh terakhir, nilai pulangan daripada IfError boleh disemak untuk menentukan sama ada terdapat sebarang masalah:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Keserasian jenis
IfError mengembalikan nilai salah satu hujahnya. Jenis semua nilai yang mungkin dikembalikan oleh IfError mestilah serasi.
Dalam contoh terakhir, Patch mengembalikan rekod yang tidak serasi dengan Boolean yang digunakan untuk formula Penggantianatau DefaultResult . Yang tidak mengapa, kerana tiada situasi di mana nilai pulangan daripada panggilan Tampalan ini akan dikembalikan oleh IfError.
Nota
Walaupun tingkah laku dalam proses untuk perubahan, jenis semua hujah mesti IfError serasi pada masa ini.
Dalam contoh mudah yang diterangkan lebih awal:
IfError( 1/x, 0 )
Jenis 1/x dan 0 serasi kerana kedua-duanya ialah nombor. Jika tidak, hujah kedua dipaksa untuk memadankan jenis hujah pertama.
Paparan Excel#DIV/0! apabila pembahagian dengan sifar berlaku.
Pertimbangkan IfError dengan perkara berikut:
IfError( 1/x, "#DIV/0!" )
Formula di atas tidak akan berfungsi. Rentetan "#DIV/0!" teks dipaksa kepada jenis hujah pertama kepada IfError, iaitu nombor. Hasilnya IfError adalah satu lagi ralat kerana rentetan teks tidak boleh dipaksa. Sebagai pembetulan, tukar argumen pertama kepada rentetan teks supaya IfError sentiasa mengembalikan rentetan teks:
IfError( Text( 1/x ), "#DIV/0!" )
Seperti yang dilihat di atas, IfError boleh mengembalikan ralat jika Replacement atau DefaultResult ialah ralat.
Kesilapan Pertama / Semua Ralat
Dalam formula penggantian, maklumat tentang ralat ditemukan tersedia melalui rekod FirstError dan jadual AllErrors. AllErrors ialah jadual rekod maklumat ralat dengan FirstError menjadi pintasan kepada rekod pertama jadual ini. FirstError sentiasa mengembalikan nilai yang sama seperti First( AllErrors ).
Error Rekod termasuk:
| Medan | Jenis | Description |
|---|---|---|
| Jenis | ErrorKind enum (nombor) | Kategori ralat. |
| Mesej | Rentetan teks | Mesej tentang ralat, sesuai untuk ditunjukkan kepada pengguna akhir. |
| Sumber | Rentetan teks | Lokasi di mana ralat berasal, digunakan untuk pelaporan. Contohnya, untuk formula terikat kepada sifat kawalan, nilai ini berada dalam bentuk ControlName.PropertyName. |
| Diperhatikan | Rentetan teks | Lokasi di mana ralat ditunjukkan kepada pengguna, digunakan untuk pelaporan. Contohnya, untuk formula terikat kepada sifat kawalan, nilai ini berada dalam bentuk ControlName.PropertyName. |
| Butiran | Rekod | Butiran tentang ralat. Pada masa ini, butiran disediakan hanya untuk ralat rangkaian. Rekod ini termasuk HttpStatusCode yang mengandungi kod status HTTP dan HttpResponse yang mengandungi badan respons daripada penyambung atau perkhidmatan. |
Sebagai contoh, pertimbangkan formula berikut sebagai kawalan Butang sifat OnSelect:
Set( a, 1/0 )
Dan formula ini pada sifat OnSelect bagi kawalan Butang kedua:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Formula contoh di atas akan memaparkan sepanduk berikut apabila kedua-dua butang diaktifkan dalam jujukan:
Biasanya, hanya akan ada satu ralat yang FirstError boleh berfungsi dengan secukupnya. Walau bagaimanapun, terdapat senario di mana berbilang ralat mungkin dikembalikan. Contohnya, apabila menggunakan operator perantaian formula atau fungsi Serentak. Walaupun dalam situasi ini, pelaporan FirstError mungkin cukup untuk mendedahkan masalah daripada melebihi beban pengguna dengan berbilang ralat. Jika anda masih mempunyai keperluan untuk bekerja dengan setiap ralat secara individu, anda boleh menggunakan jadual AllErrors.
IsError
Fungsi ini IsError menguji nilai ralat.
Nilai pulangan adalah Boolean benar atau palsu.
Menggunakan menghalang IsError sebarang pemprosesan ralat selanjutnya.
IsBlankOrError
Fungsi ini IsBlankOrError menguji sama ada nilai kosong atau nilai ralat dan bersamaan dengan Or( IsBlank( X ), IsError( X ) ).
Apabila mendayakan pengendalian ralat untuk apl sedia ada, pertimbangkan untuk menggantikan IsBlank dengan IsBlankOrError untuk mengekalkan tingkah laku apl sedia ada. Sebelum penambahan pengendalian ralat, nilai kosong digunakan untuk mewakili kedua-dua nilai nol daripada pangkalan data dan nilai ralat. Error pengendalian memisahkan kedua-dua tafsiran kosong ini yang boleh mengubah tingkah laku apl sedia ada yang terus menggunakan IsBlank.
Nilai pulangan adalah boolean benar atau palsu.
Menggunakan menghalang IsBlankOrError sebarang pemprosesan ralat selanjutnya.
Gunakan fungsi untuk Error mencipta dan melaporkan ralat tersuai. Contohnya, anda mungkin mempunyai logik untuk menentukan sama ada sebarang nilai yang diberikan sah untuk konteks anda atau tidak—sesuatu yang tidak diperiksa untuk masalah secara automatik. Anda boleh mencipta dan mengembalikan ralat anda sendiri, lengkap dengan Jenis dan Mesej, menggunakan rekod yang sama yang diterangkan di atas untuk fungsi tersebut IfError .
Dalam konteks IfError, gunakan Error fungsi untuk membuang semula atau melalui ralat. Sebagai contoh, logik anda mungkin IfError memutuskan bahawa dalam sesetengah kes ralat boleh diabaikan dengan selamat, tetapi dalam kes lain ralat itu penting untuk dihantar. Dalam IfError atau App.OnError, gunakan Error( FirstError ) untuk melalui ralat.
Fungsi ini Error juga boleh diluluskan jadual ralat, seperti yang akan ditemui dalam jadual AllErrors . Gunakan Error( AllErrors ) untuk membuang semula semua ralat dan bukan hanya yang pertama.
Rekod kosong atau jadual kosong yang dihantar ke Error tidak menghasilkan ralat.
Sintaks
Error( Rekod Ralat )
Error( Jadual Ralat )
- ErrorRecord – Diperlukan. Error rekod maklumat, termasuk Jenis, Mesej dan medan lain. Jenis diperlukan. FirstError boleh dihantar secara langsung.
- Jadual Kesalahan– Diperlukan. Jadual rekod maklumat ralat. AllErrors boleh dihantar secara langsung.
IfError( Nilai1, Penggantian1 [, Nilai2, Penggantian2, ... [, DefaultResult ] ] )
- Nilai - Diperlukan. Formula untuk menguji nilai ralat.
- Penggantian - Diperlukan. Formula untuk dinilai dan nilai untuk dikembalikan jika pemadaman argumen Nilai akan mengembalikan ralat.
- DefaultResult – Pilihan. Formula untuk menilai jika formula tidak menemui sebarang ralat.
IsError( Nilai )
IsBlankOrError( Nilai )
- Nilai - Diperlukan. Formula untuk menguji.
Contoh
Mudah IfError
| Formula | Description | Hasil |
|---|---|---|
| IfError( 1, 2 ) | Argumen pertama bukanlah ralat. Fungsi ini tidak mempunyai ralat lain untuk menyemak dan tidak ada nilai pulangan lalai. Fungsi akan mengembalikan argumen nilai terakhir yang dinilai. | 1 |
| IfError( 1/0, 2 ) | Argumen pertama akan mengembalikan nilai ralat (kerana pembahagian dengan sifar). Fungsi menilai argumen kedua dan mengembalikannya sebagai hasilnya. | 2 |
| IfError( 10, 20, 30 ) | Argumen pertama bukanlah ralat. Fungsi ini tidak mempunyai ralat lain untuk menyemak tetapi mempunya nilai pulangan lalai. Fungsi akan mengembalikan argumen DefaultResult. | 30 |
| IfError( 10, 11, 20, 21, 300 ) | Argumen pertama 10 bukan ralat, maka fungsi tidak menilai penggantian argumen yang sepadan 11. Argumen ketiga 20 bukan ralat, maka fungsi tidak menilai penggantian argumen yang sepadan 21. Argumen kelima 300 tidak mempunyai penggantian yang sesuai dan merupakan hasil lalai. Fungsi akan mengembalikan hasil kerana formula tidak mengandungi ralat. | 300 |
| IfError( 1/0, Maklumkan ( "Terdapat masalah dalaman" ) ) | Argumen pertama akan mengembalikan nilai ralat (disebabkan oleh pembahagian dengan sifar). Fungsi menilai argumen kedua dan memaparkan mesej kepada pengguna. Nilai pulangan ialah IfError nilai pulangan Notify, dipaksa kepada jenis yang sama seperti hujah pertama kepada IfError (nombor). | 1 |
Mudah IsError
| Formula | Description | Hasil |
|---|---|---|
| IsError( 1 ) | Argumen bukanlah ralat. | Palsu |
| IsError( Kosong () ) | Argumen adalah kosong, tetapi bukan ralat. | Palsu |
| IsError( 1/0 ) | Argumen adalah ralat. | Benar |
| Jika( IsError( 1/0 ), Maklumkan ( "Terdapat masalah dalaman" ) ) | Argumen untuk IsError mengembalikan nilai ralat (kerana pembahagian dengan sifar). Fungsi ini mengembalikan benar, yang menyebabkan If untuk memaparkan mesej kepada pengguna dengan fungsi Notify. Nilai pulangan If ialah nilai pulangan bagi Makluman, dipaksa untuk jenis yang sama dengan argumen untuk If (boolean). | Benar |
Mudah IsBlankOrError
| Formula | Description | Hasil |
|---|---|---|
| IsBlankOrError( 1 ) | Argumen bukanlah ralat atau kosong. | Palsu |
| IsBlankOrError( Kosong () ) | Argumen adalah kosong. | Benar |
| IsBlankOrError( 1/0 ) | Argumen adalah ralat. | Benar |
Mudah Error
Dalam contoh ini, tarikh disahkan relatif antara satu sama lain, menyebabkan ralat jika terdapat masalah.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
Dalam contoh ini, sesetengah ralat dibenarkan untuk melepasi manakala yang lain ditindas dan digantikan dengan nilai. Dalam kes pertama, b berada dalam keadaan ralat kerana fungsi Nilai mempunyai hujah yang tidak sah. Oleh kerana ini tidak dijangka oleh penulis formula, ia dilalui supaya pengguna melihatnya. Dalam kes kedua, dengan formula yang sama,b mempunyai nilai 0, menghasilkan pembahagian dengan sifar. Dalam kes ini, penulis formula mungkin mengetahui bahawa ini boleh diterima untuk logik ini, menyekat ralat (tiada sepanduk ditunjukkan), dan mengembalikan -1 sebaliknya.
With( {a: 1, b: Value("a")},
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument
With( {a: 1, b: 0} )
IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1
Jadual AllErrors boleh ditapis seperti mana-mana jadual lain. Digunakan dengan Error fungsi, ralat yang dijangkakan boleh dialih keluar dan ralat yang tinggal dikekalkan dan dilaporkan. Sebagai contoh, jika kita tahu bahawa pembahagian dengan sifar tidak akan menjadi masalah dalam konteks tertentu, ralat tersebut boleh ditapis, meninggalkan semua ralat lain utuh dengan formula berikut:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Langkah demi langkah
Tambah kawalan Input teks dan namakannya TextInput1 jika tidak mempunyai nama tersebut secara lalai.
Tambah kawalan Label dan namakannya Label1 jika tidak mempunyai nama tersebut secara lalai.
Set formula untuk sifat Label1Teks untuk:
IfError( Value( TextInput1.Text ), -1 )Dalam TextInput1, masuk 1234.
Label1 menunjukkan nilai 1234 kerana ini adalah input yang sah kepada fungsi Nilai.
Dalam TextInput1, masuk ToInfinity.
Label1 menunjukkan nilai-1 kerana ini bukan input yang sah kepada fungsi Nilai. Tanpa membungkus fungsi Nilai dengan IfError, label tidak akan menunjukkan nilai kerana nilai ralat dianggap sebagai kosong.