My Programs

Project/Program Date Written Description / What the program does
1 Show Pictures November 2011 List folders, subfolders, and file names of Windows Pictures. Click a file name to see the picture.
2 Find Duplicate Pictures November 2011 Program is one part of the process to find duplicate pictures in Windows Pictures.
3 Household Items January 2012 Show thumbnail versions of pictures I have taken of items in the house. Click a thumbnail picture to see the large version of the photo. The program also has the feature to renumber the pictures, if the user desires.
4 Lighthouse Emails January 2012 Use dropdown boxes to enter my activity and time spent on volunteering each month. Time by person and total time are determined automatically. The resulting screen information can be captured with a click of a button, and then I can paste that information into a new email body for sending to the Lighthouse of Houston.
5 TextBox in Large Font January 2012 Load a RichTextBox and display the contents in a large font. I found most of the coding for the program on the internet.
6 TextBox with line highlighted January 2012 Highlight a line containing a word entered into a text box. I found most of the coding for the program on the internet.
7 Calendar of Scheduled Events January 2012 User enters a date and an interval (in days). The program calculates all remaining dates for the year and for January of the following year. I found most of the coding for the program on the internet.
8 Find People February 2012 User enters some facts about someone (usually a famous person). Pictures can also be included as part of the data. Later, when the user wants to find that person (or someone else who he has previously entered information about), he enters a few facts about that individual, and the program searches the database. If one or more people are found per the search criteria, the program displays a list of possibilities. The user clicks one of the possibilities, and the picture of the person appears. If it's the wrong person, the user can click again.
9 Music from the Library March 2012 Dig into Windows Music folder to find a song and then play it.
10 Music Database April 2012 This is my big program (originally written in VB 6) to list the songs in the Windows Music folder. I can search for an artist, an album, or a song. The program can also play video clips (of the ones I have stored in the database).
11 Rename Files June 2012 Rename and/or renumber files in a Windows folder. This program gives me the ability to reposition files permanently (for example, pictures) within a folder.
12 Road Trip July 2012 Keep track of expenses on a road trip. The program creates and writes to a .txt file or a spreadsheet file. This is the first program I "published." That is, compiled the program and then was able to export the finished program from my PC and load it onto another PC (without that PC having Visual Basic on it). Note: I summarize the expenses for our vacations in a spreadsheet, formatted in a particular way. The Road Trip program creates a spreadsheet (in addition to the text file) as its output, but the format of that spreadsheet is not usable for my summarized expenses mentioned above. So to utilize the output of the Road Trip program, I have written some SQL Server queries (and created some tables) that transform the Road Trip output text file into a format suitable for my expense needs. These extra queries and tables enable me to use the program, and later summarize its output in a nicely formatted sheet.
13 My Calendar for the Desktop December 2012 Create and display a small calendar with the current time.
14 Bible Emotions Jan - Feb 2013 User selects one to three emotions from a dropdown box, and the program displays a Bible verse associated with that/those emotions. Program can also vocalize the words in the verse. Much of the code is in the part of the program that the user never sees. That part enables me to enter and control the verse words. Most selections are made from dropdown boxes (for uniformity). Numerous checks and counts on the data are available for me to ensure conformity to copyright rules.
15 Encrypt February 2013 Encrypt and decrypt (1) the user types into the screen area or pastes into the screen area from a .txt file or(2) the input is directly from a .txt file. Encryption is multi-layered. That is, the original user's typing is encrypted, and then that result is encrypted again (but not necessarily by the same rules). To decrypt the data, the program is run in decrypt mode. So if a person encrypts his writing, no one can decipher it unless he has a copy of the program (or is very smart). In November 2017 I added the feature of finding a literal (actually, all occurrences of the literal) in the text data via a button or Ctrl-F.
16 My Text Editor October 2013 Program creates HTML tags from a text file. The text file is then ready to be used in a web page.  I wrote the program as a shortcut (software) for me to enable me to get a text document ready for the web with the least amount of typing on my part. I just click in various ways, and the program calculates where to place the proper beginning and ending tags. The user can do the following: click regular, click special, click and drag, double-click. The user can Undo and Redo his typing. Each option above causes the HTML tags to be inserted into the text data to format it (for bolding large or small, italicizing, creating line breaks, or creating new paragraphs). Another feature of the program is that a vertical box can be created to surround a sentence or a set of short words. (The set of words can be used as a synopsis of the main body of words). The program automatically breaks the sentence in parts to fit the width of the box. The program also determines the proper height of the box. My intention for the program is for the resulting page to use Cascading Style Sheets.
17 Excel Subset May 2014 Program reads an Excel Workbook (spreadsheet) and creates a new Workbook with selected rows from the original sheet (per the user's input). All rows whose designated cell equals the criterion literal are copied to the new spreadsheet. The user clicks the Open button to open the desired workbook (via OpenFileDialog1) and answers the questions posed by the InputBoxes. If the user does not cancel during the process, the program writes the selected rows to the new sheet and then displays the input values and gives the result counts. The user has the option to save or discard the new sheet. A textbox is also created that gives the heights and widths of the rows and columns so the user can adjust the new spreadsheet to look like the original sheet (in height and width). The user has the option to print the textbox. If all of the columns can not fit in Portrait mode, the program automatically switches to Landscape mode. The user enters the following information: the name of the sheet he wishes to open. the column letter of the column that contains the literal. The program converts the user entry to upper case for processing. the literal value itself. the letter "y" to indicate that the literal is to be used in a case-insensitive manner (or he enters any other letter to indicate that case-sensitivity is to be applied). The default value is "y". the letter "y" to indicate that the first row (the "header row") is to be copied to the new Workbook unconditionally (or he enters any other letter to treat the first row like any other row, subject to the user's literal criterion). The default value is "y". Note: If the user clicks the Cancel button on any of the InputBoxes, none of the other boxes will show. The main form then shows (for the user to start over). Limitation: This program can work with spreadsheets having a maximum of 52 columns (due to the check on the user's input). Many thanks to Siddharth Rout (a Microsoft MVP) for his excellent code that I am using in this program.
18 Morse Code June 2014 Program can translate regular typing of letters and numbers into the Morse Code dots and dashes -and- can translate Morse Code into regular English letters and numbers. Twenty-seven special characters are also allowed to be typed as input. They are "passed thru" to the output side without alteration. This lets the user add some punctuation to his typing. Checking is performed on the input data, and any invalid characters are shown on output as the tilde (~) character. A Copy button is available to copy the results (for pasting into the body of an email or such). A Help button is available to explain the types of characters that can be entered.
19 Music Maintenance February 2015 Program can find "duplicate" songs in an album on the PC. It can do this for a single album, for all albums for an artist, or for all albums for all artists on the PC. It can list all of the songs for each album. It can list all of the duplicate songs it finds. Upon user command, the program can physically remove the unwanted songs (to the Recycle Bin or Permanently). Unfortunately, the user must hit the Enter key for each duplicate to be removed. A Help button is available to guide the user thru the whole process.
20 Arrange Pictures March 2016 Program reads an MS Word document that has a table defined in it (a table of pictures) and transforms the arrangement of those pictures into a new arrangement of the user's choice. The user chooses the number of pictures per page for the new Word document. That number can be 1, 2, 3, 4, 5, 6, 9, or 12. I wrote this program to help with the Tai Chi yearbook and, because the yearbook utilizes banners, the program requires that the Word document have a banner in it, preceding the pictures. A limitation of the program is that the pictures are not resized themselves; only the table cells containing the pictures are resized. Empty cells in the original document are bypassed. A Help button is available to guide the user thru the whole process. The negative part of the program is that it takes a long time to run, even with a new PC.
21 Concatenate Documents January 2016 Program reads a folder and builds a single MS Word document consisting of all of the Word documents in that folder that meet the user's specifications. The user enters a starting literal for the input document names and the type of file suffix (.doc or .docx or both). He can also specify a few document names that are not to be selected. He then navigates to the folder and starts the process. Page breaks are automatically issued, when needed, since not all input documents end on a full page boundary. Input and output counts of the documents are given at the end of the run. A Help button is available to guide the user thru the whole process.
22 Updoming Bills May - June 2017 Add bills-to-be-paid to a text file. Mark paid bills as such. The program reads a text file of bills that are to be paid soon. The user can add a new bill to the file and can mark a particular bill as paid. He can display all of the bills. Visual Basic (Express Edition) does not have the ability to sort an array with more than a single dimension. The Pending and Paid arrays that I use in the program are each three dimensions. I had to write my own code to sort each array (one ascending and the other descending). The Pending array is listed before the Paid array to display all of the records in proper sequence.
23 Reformat City Populations June 2017 Reformat a list of cities and their populations into a boxed (justified), nice-looking list. The purpose of this program is to create a nice-looking list so that I can export it to my cell phone. I copy a list of a state from the internet into an Excel spreadsheet and eliminate all of the columns except the city name and its population. I tweak the list a bit, as necessary, replace the header lines and sort the sheet by city name. I then copy the result to a text file, where I tweak the header line a little (just for looks). I run the program and navigate to the text file and open it. The program reformats the file in memory, deletes the file on disk, and then recreates it with the reformatted data. After saving the file, I can connect my cell phone to the PC and transfer the file to the phone. On my phone, I store the file in Internal shared storage > Explore > Documents. The special features of the program are "fixed length" strings, right-justified numbers, and the FormatNumber function, which formats a number with commas. [That wonderful function saves me from having to write my own code.]
24 A1 Tops Inventory December 2018 Program to help maintain the physical inventory of my friend's air-conditioning company. The purpose of this program is to help the company owner maintain a list of the physical equipment and parts that he uses in his business. The owner adds, changes, splits, and removes records of inventory items. The split function lets him move some of the pieces to another location via a one-step process. All of the processing is done in arrays in the program. Code sorting is done on the 2-dimentional array (since Visual Basic can sort only single-dimensional arrays). The data is stored in text files. A listbox contains the names of each item. Its width changes depending on the number of items in the box. The width feature is just something I wanted to try to do. An upper row of text boxes contains the unique values of all of the records in the lower, big listbox. A middle row lets the owner enter his new or changed data. Edits for the location, the quantity, and the value are enforced by program code. A NumericUpDown button is provided for the quantity change. A timer is used for a message. Some numbers are right-justified for a nice, visual look. A nice feature is provided to let the owner click a line in an upper box without having to type that data in the corresponding middle box when he is making a change to a record. An afterthought feature I added lets the owner double-click an item to see a picture of it. Naturally, the picture has to be pre-loaded into a folder on disk. Hardcopy printing is available. A Help screen is provided to explain all of the functions/features of the program.
25 Names and Phone Numbers January 2019 Program to create a list (a file) of phone numbers and names from my Windows Contacts file. The purpose of this program is to help me find a phone number quickly by looking only at the last four digits. (I can remember the last four digits easier than I can remember the full number.) I wrote the program to have this ability so I can determine if a recent phone call I received is from someone I know or just from an unwanted caller. For this program to work (and for a few other previous programs to work), I have had to remove every comma from all contacts. (That, by itself, was a long process. But since I read .csv files in some of my programs, I cannot have extra commas floating around in the Contacts data.) The main problem with writing this program was to bypass all of the columns that I don't need in the exported Contacts file. All of the exported columns (except Notes) have a comma to separate each of them from the next column (so those columns are easy to find). The Notes column, however, ends with the carriage return - line feed characters (vbCrLf) (Chr(13) & Chr(10)). (Those characters can also be embedded in the Notes body whenever I have pressed the Enter key to space out the stuff I am typing as my notes.) I got around this problem (eventually) by first replacing each of the sets of control characters with a special character (one that I never use in any contact) and then finding the next comma (which is after the first column of the NEXT "record") and then searching backwards for the special character and noting that position when I find it. (I ignore the entire Notes column this way.) The program code then continues its looping thru the input file (which is really just a long string) as normal. The format of the output file is this: last 4 digits of the phone number, the person's name, the type of phone (cell, home, etc.), and the full phone number. The file is sorted by the first column. I download the file as a document onto my cell phone. When I get a call and don't recognize the number, I don't answer the call. Later, I open the document and scroll down the list. If I find the number, I can deal with the call when I have time. If I don't recognize the number, I disregard the call. Three built-in functions that I use are Split, ReDim Preserve, and Array.Sort. This program, with its simple results, took a lot longer to write than I anticipated, but I learned much in the process. So, "All's well that ends well."
26 Stocks Oct 2019 This program lets me pretend to buy shares of stocks and see the dividend outcome of the purchases.
27 PrepareWebRequestURLs Program 1 of 2 for Dividends. May 2020 I found a website of companies and their websites (don't know where now).  I copied that data into a spreadsheet on my H drive (H:\MONEY INVESTMENTS\STOCK PRICES and DIVIDENDS\CompaniesAndTheirWebsites.xlsx). I have to manually edit the data several ways. Then, this program works on my spreadsheet of that data by preparing CASE statements for the next program (Read Stocks From Web). I have to manually copy and paste the output from this program into "Read Stocks From Web".
28 Read Stocks From Web Program 2 of 2 for Dividends. May 2020 Get DIVIDEND values from various websites (companies).   Special code: Imports System.Threading Thread.Sleep command ex.Status = WebExceptionStatus.ProtocolError Error is 404 (not found) This program works with "PrepareWebRequestURLs"
29 Download Stock Data (#1 of 2 for Stocks) Oct 2020 I wrote this program after I had written "Load Stock Data".  It feeds "Load Stock Data".  It performs two functions: (1) It reads an in-house string of stock ticker symbols and downloads the historical prices of the stocks. (2) It can also read an external text list of   ALL   of the stock ticker symbols on the S&P500 and get the current price of each stock.  The downloaded files are the input files for the Load  program. It automatically gets the current link to the files containing the historical data. Existing files that will be filled are deleted and then recreated. The S&P500 sectors are automatically used in the processing. The process is quite fast (under ten seconds for 20 stocks) or under seven minutes for all 500 stocks in (2) above. DateDiff, Today().AddDays, WebRequest, Thread.Sleep.
30 Load Stock Data (#2 of 2 for Stocks) (This program is fed by program Download Stock Data.) June 2020 with major additions in Oct, Nov, and Dec. Other big changes in Jan, Feb, and Mar 2022. Adds downloaded stock data to spreadsheets. If a tab/sheet does not exist, the program will create one with all of the original charts and then fill the sheet.  If a sheet does exist, the program will just fill it. The program can handle a variable number of input rows (253, 254, or 255), since the number of rows can change from one day to the next. If a non-fatal error occurs, the program makes a note in a text file and then continues. The complete list of stocks is shown.  As each stock is processed, it is highlighted (by separation). SPLIT function. xlWorkSheet.Rows("2").Insert()  Add a new row (2nd row). Commented code to show all workbook sheet names. Gather & Display my evals (in Excel charts). Refresh(),          Redim, Array.Sort(),     Sort Excel sheet, Audio.PlaySystemSound, worksheet.cells.value...adddays, xlApp.Visible,     Console.WriteLine, xlWorkSheet = Nothing, xlWorkSheet.Copy, xlWorkSheet.Name, CType(xlWorkSheets(i), xlWorkSheets(i).Delete(), Format(xlWorkSheet.Cells(284, 10).value, "short date"), Format(xlWorkSheet.Cells(284, 14).value, "Fixed") xlWorkSheet.Hyperlinks.Add.
31 Improve Your Memory I wrote this program to try to improve my memory with names, places, and other things. I just can't recall things that once were easy to remember. Dec 2021 with major additions in July 2023. THE PROGRAM HAS THREE FUNCTIONS: (1) The program has twenty-four (24) GROUPS of words (with 4 to 50 words in each group) with all of the groups spread “randomly” (my choosing) over nine (9) ARRANGEMENTS. The user can choose from 1 To 7 LEVELS OF DIFFICULTY. This combination allows for a minimum amount of repetition for each run of the program. The program is designed to be run by one person (which I am calling the ADMINISTRATOR) and responded to by the target person (which I am calling the BENEFACTOR). But one person alone can run the program. The program displays from three to twenty-four words, depending on the Level of Difficulty. The benefactor's job is to memorize the words, go away for awhile, return, and try to recall as many of the words as he can. The list of words can be saved for later use. The number (and percent) of correct recalls can be shown. The person can Print and/or Print Preview his list of scores. (2) The program also displays pictures of fruits and vegetables, which the user is asked to name. (3) The Jizsaw Puzzle was added in July 2023. The user clicks a built-in picture or one he has loaded, decides the level of breaking it apart randomly, and then works to put it back together.