Đếm số sheet trong workbok? (1 người xem)

  • Thread starter Thread starter van_v
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Không đâu anh Duy thương. mỗi biến được lưu một giá trị, mà giá trị có thể lớn hoặc nhỏ nên theo đó mình phải khai báo cho phù hợp, Còn trong 1 chương trình cho dù chương trình đó lớn tới cỡ nào đi chăng nữa nhưng nếu các biến của nó không có lưu giá trị lớn thì nó cũng khai báo kiểu nho nhỏ thôi
ví dụ
có 1 vài trường hợp biến chỉ được nhận 1 trong 2 giá trị(tại sao người ta không sử dụng kiểu, byte, long hoặc integer để lưu) mà chọn kiểu Boolean, vì kiểu boolean phù hợp với yêu cầu và tiết kiệm được nhiều bộ nhớ
nếu mình nhận định được các giá trị mà biến có thể lưu thì mình nên đặt bộ nhớ cho thích hợp
(do hiện nay tộc độ cũng như bộ nhớ máy tính nhiều nên anh thấy không vấn đề gì, nếu anh chạy file lớn mà không để ý đến biến là nguy hiểm lắm đó)
Vụ này đã bàn rất nhiều lần rồi (bạn tìm sẽ thấy).... Riêng tôi thì cóc thèm xài mấy thằng Byte hay Interger cho mệt, cứ Long mà phang..
-----------------
Em cảm ơn anh.
Anh giúp em thêm một tí, em muốn Kết quả thể hiện tại Cell A1 của Sheet "Ma" thì làm cách nào? (không cần thông báo Msgbox)
Bạn có thể dùng công thức như sau:
- Đặt name:
PHP:
ShN = GET.WORKBOOK(ROW(INDIRECT("A1")))
- Công thức tại cell A1:
PHP:
=SUMPRODUCT((LEN(ShN)-LEN(SUBSTITUTE(ShN,"]T","")))/2)
 
chắc phải để các sư phụ giải thích. tôi thì xem các code API họ ít khi xử dụng bye mà toàn sử dung LOng. chẳng lẽ code được win hỗ trợ lại là trương trình nhỏ
Em không biết gì về API cả, đây chỉ là những kiến thức cơ bản về Macro mà các sư phụ tigertiger dạy em trước đó. Em còn nhớ rõ trong một bài giảng về khai báo biến sư phụ có lấy ví dụ thế này: nếu ta muốn dùng 1 biến để chứa các tháng thì chỉ cần khai báo kiểu byte là đủ vì các tháng chỉ từ 1 đến 12 mà giới hạn của byte là từ 0 đến 255 vì thế khai báo là Long thì hơi phí. Trong các chương trình nhỏ thì nó ko ảnh hưởng gì nhưng trong các chương trình lớn nếu chúng ta biết rõ giới hạn của biến thì nên khai báo chuẩn để tiết kiệm bộ nhớ cho máy tính giúp chương trình chạy nhanh hơn.
Vài dòng chia sẻ!!!
 
Lần chỉnh sửa cuối:
Em không biết gì về API cả, đây chỉ là những kiến thức cơ bản về Macro mà sư phụ tigertiger dạy em trước đó. Em còn nhớ rõ trong một bài giảng về khai báo biến sư phụ có lấy ví dụ thế này: nếu ta muốn dùng 1 biến để chứa các tháng thì chỉ cần khai báo kiểu byte là đủ vì các tháng chỉ từ 1 đến 12 mà giới hạn của byte là từ 0 đến 255 vì thế khai báo là Long thì hơi phí. Trong các chương trình nhỏ thì nó ko ảnh hưởng gì nhưng trong các chương trình lớn nếu chúng ta biết rõ giới hạn của biến thì nên khai báo chuẩn để tiết kiệm bộ nhớ cho máy tính giúp chương trình chạy nhanh hơn.
Vài dòng chia sẻ!!!

Vậy thì bạn nên xem qua bài này:
http://www.giaiphapexcel.com/forum/showthread.php?13255-Biến-integer-biến-long-cái-nào-nhanh-hơn
Toàn là những sư phụ hàng đầu GPE tranh luận, chắc đủ uy tín chứ
 
Cách đặt name thì bài trên đã nói rồi, tôi nói thêm 1 chút: hàm này không phải là hàm Excel thông thường, nó là hàm macro 4, có từ thời xa xưa nhưng do ứng dụng của nó vẩn còn rất hửu ích nên đến nay vẩn còn người dùng... Với bộ hàm này, có cái đặt name được, có cái thì không (tùy)
Em không đặt Name được! các thầy cô & anh chị hướng dẫn em tiếp phần cài macro 4 này.
Em cảm ơn.
 
Em không đặt Name được! các thầy cô & anh chị hướng dẫn em tiếp phần cài macro 4 này.
Em cảm ơn.

Sao mà không được chứ! Copy paste vào thôi mà
Lưu ý: Macro 4 cũng là macro, vì vậy phải Enable Macro thì công thức mới chạy
 

File đính kèm

Ý mình cũng như vậy mà!
Nhưng cho mình hỏi tí:
Mình mở 1 file mới, rồi mở thêm 1 file mới nữa là 2 file đúng không?
Nhưng mình nhập hàm này vào trong 1 sheet của 1 file thì kết quả là 3 là sao? phải 3 sheet không?
Mã:
=INFO("numfile")
Rồi sao đó mình thêm thử một sheet trong file có công thức trên, kết quả của hàm này không cập nhật được mà phải gõ lại, kết quả thay đổi là 4.
Vậy là sao?
Bạn có thể giải thích thêm về hàm này không?
Thân chào và chúc sức khỏe?

Trả lời bạn:
Mã:
=INFO("numfile")
Là tổng số sheets của tất cả các workbook bạn đang mở bạn nhé!

_________________________________
skygift.vn - golaza.vn
 
có 1 vài trường hợp biến chỉ được nhận 1 trong 2 giá trị(tại sao người ta không sử dụng kiểu, byte, long hoặc integer để lưu) mà chọn kiểu Boolean, vì kiểu boolean phù hợp với yêu cầu và tiết kiệm được nhiều bộ nhớ
Có chắc không vậy, khi nói đên boolean ai chả biết về mặt lưu thông tin thì nó lưu được hai giá trị ( chỉ cần một bít, về mặt logic). Tuy nhiên xét trên khía cạnh vật lý thì nó lại ngốn 2 byte nhé. Đố mọi người biết tại sao nó lại không dùng một bít ( vật lý).
 
Có chắc không vậy, khi nói đên boolean ai chả biết về mặt lưu thông tin thì nó lưu được hai giá trị ( chỉ cần một bít, về mặt logic). Tuy nhiên xét trên khía cạnh vật lý thì nó lại ngốn 2 byte nhé. Đố mọi người biết tại sao nó lại không dùng một bít ( vật lý).
Biến kiểu Boolean nó chỉ chiếm 1 byte trong bộ nhớ thôi bạn, còn tại sao các kiểu dữ liệu được lưu bằng đơn vị i là byte cái này bạn học các môn lập trình cơ sở sẽ biết
 
Biến kiểu Boolean nó chỉ chiếm 1 byte trong bộ nhớ thôi bạn, còn tại sao các kiểu dữ liệu được lưu bằng đơn vị i là byte cái này bạn học các môn lập trình cơ sở sẽ biết
Lập trình cơ sở nói về một ngôn ngữ lý tưởng (ideal language). VBA không phải là ngôn ngữ lập trình lý tưởng.
Trong VBA, Boolean là một Integer. Và cách sử lý trị của nó cũng khá rối rắm.
Nêu 0 thì là false, nếu bất cứ bit nào trong 16 bits của nó khác 0 thì là True. Mặc định True là tất cả các bits đều khác 0.

Nói chung thì cái chuyện nhanh chậm và tốn bộ nhớ chỉ là chuyện 20 năm về trước. Thời buổi bây giờ CPU có khả năng lấy nhiều bytes 1 lúc, và máy tính có bộ nhớ lớn. Chuyện kích cỡ của trị nguyên nó gần như không quan trọng, dùng byte chỉ thêm phần rắc rối với khả năng bị tràn số. Trừ phi bạn tạo bảng dò (bit map) hoặc dùng mảng rất lớn (cỡ triệu phần tử) hoặc dùng hàm đệ quy.
Byte cũng có lợi điểm là nó tránh cho bạn trường hợp lựa chọn big/small endian. Tuy nhiên, đây là loại lập trình cao cấp và lập trình nhúng (embedding)
 
Có cách nào mình kiểm tra tổng số sheet mình add vào thiếu hay ko.
 
Lập trình cơ sở nói về một ngôn ngữ lý tưởng (ideal language). VBA không phải là ngôn ngữ lập trình lý tưởng.
Trong VBA, Boolean là một Integer. Và cách sử lý trị của nó cũng khá rối rắm.
Nêu 0 thì là false, nếu bất cứ bit nào trong 16 bits của nó khác 0 thì là True. Mặc định True là tất cả các bits đều khác 0.

Nói chung thì cái chuyện nhanh chậm và tốn bộ nhớ chỉ là chuyện 20 năm về trước. Thời buổi bây giờ CPU có khả năng lấy nhiều bytes 1 lúc, và máy tính có bộ nhớ lớn. Chuyện kích cỡ của trị nguyên nó gần như không quan trọng, dùng byte chỉ thêm phần rắc rối với khả năng bị tràn số. Trừ phi bạn tạo bảng dò (bit map) hoặc dùng mảng rất lớn (cỡ triệu phần tử) hoặc dùng hàm đệ quy.
Byte cũng có lợi điểm là nó tránh cho bạn trường hợp lựa chọn big/small endian. Tuy nhiên, đây là loại lập trình cao cấp và lập trình nhúng (embedding)

gop vui

[CODE
#include <stdio.h>
#include <Python.h>
#include <pyhelper.hpp>

static PyObject* arnav_foo(PyObject* self, PyObject* args)
{
printf_s("... in C++...: foo() method\n");
return PyLong_FromLong(51);
}

static PyObject* arnav_show(PyObject* self, PyObject* args)
{
PyObject *a;
if(PyArg_UnpackTuple(args, "", 1, 1, &a))
{
printf_s("C++: show(%ld)\n", PyLong_AsLong(a));
}

return PyLong_FromLong(0);
}

static struct PyMethodDef methods[] = {
{ "foo", arnav_foo, METH_VARARGS, "Returns the number"},
{ "show", arnav_show, METH_VARARGS, "Show a number" },
{ NULL, NULL, 0, NULL }
};

static struct PyModuleDef modDef = {
PyModuleDef_HEAD_INIT, "arnav", NULL, -1, methods,
NULL, NULL, NULL, NULL
};

static PyObject* PyInit_arnav(void)
{
return PyModule_Create(&modDef);
}

int main()
{
PyImport_AppendInittab("arnav", &PyInit_arnav);

CPyInstance hInstance;

const char pFile[] = "pyemb6.py";
FILE* fp = _Py_fopen(pFile, "r");
PyRun_AnyFile(fp, pFile);

return 0;
}

/CODE]
Bài đã được tự động gộp:

Lập trình cơ sở nói về một ngôn ngữ lý tưởng (ideal language). VBA không phải là ngôn ngữ lập trình lý tưởng.
Trong VBA, Boolean là một Integer. Và cách sử lý trị của nó cũng khá rối rắm.
Nêu 0 thì là false, nếu bất cứ bit nào trong 16 bits của nó khác 0 thì là True. Mặc định True là tất cả các bits đều khác 0.

Nói chung thì cái chuyện nhanh chậm và tốn bộ nhớ chỉ là chuyện 20 năm về trước. Thời buổi bây giờ CPU có khả năng lấy nhiều bytes 1 lúc, và máy tính có bộ nhớ lớn. Chuyện kích cỡ của trị nguyên nó gần như không quan trọng, dùng byte chỉ thêm phần rắc rối với khả năng bị tràn số. Trừ phi bạn tạo bảng dò (bit map) hoặc dùng mảng rất lớn (cỡ triệu phần tử) hoặc dùng hàm đệ quy.
Byte cũng có lợi điểm là nó tránh cho bạn trường hợp lựa chọn big/small endian. Tuy nhiên, đây là loại lập trình cao cấp và lập trình nhúng (embedding)
Gop Vui


#include <stdio.h>
#include <Python.h>
#include <pyhelper.hpp>

static PyObject* arnav_foo(PyObject* self, PyObject* args)
{
printf_s("... in C++...: foo() method\n");
return PyLong_FromLong(51);
}

static PyObject* arnav_show(PyObject* self, PyObject* args)
{
PyObject *a;
if(PyArg_UnpackTuple(args, "", 1, 1, &a))
{
printf_s("C++: show(%ld)\n", PyLong_AsLong(a));
}

return PyLong_FromLong(0);
}

static struct PyMethodDef methods[] = {
{ "foo", arnav_foo, METH_VARARGS, "Returns the number"},
{ "show", arnav_show, METH_VARARGS, "Show a number" },
{ NULL, NULL, 0, NULL }
};

static struct PyModuleDef modDef = {
PyModuleDef_HEAD_INIT, "arnav", NULL, -1, methods,
NULL, NULL, NULL, NULL
};

static PyObject* PyInit_arnav(void)
{
return PyModule_Create(&modDef);
}

int main()
{
PyImport_AppendInittab("arnav", &PyInit_arnav);

CPyInstance hInstance;

const char pFile[] = "pyemb6.py";
FILE* fp = _Py_fopen(pFile, "r");
PyRun_AnyFile(fp, pFile);

return 0;
}
 
gop vui

[CODE
#include <stdio.h>
#include <Python.h>
#include <pyhelper.hpp>

static PyObject* arnav_foo(PyObject* self, PyObject* args)
{
printf_s("... in C++...: foo() method\n");
return PyLong_FromLong(51);
}

static PyObject* arnav_show(PyObject* self, PyObject* args)
{
PyObject *a;
if(PyArg_UnpackTuple(args, "", 1, 1, &a))
{
printf_s("C++: show(%ld)\n", PyLong_AsLong(a));
}

return PyLong_FromLong(0);
}

static struct PyMethodDef methods[] = {
....

Lại cái tật chôm chĩa không biết chừa:
(https://www .codeproject. com/Articles/820116/Embedding-Python-program-in-a-C-Cplusplus-code)

1591934110409.png
 
Web KT

Bài viết mới nhất

Back
Top Bottom